@@ -6,9 +6,10 @@ import random |
||
6 | 6 |
|
7 | 7 |
from django_logit import logit |
8 | 8 |
from django_response import response |
9 |
+from TimeConvert import TimeConvert as tc |
|
9 | 10 |
|
10 | 11 |
from logs.models import MchInfoDecryptLogInfo, MchInfoEncryptLogInfo |
11 |
-from mch.models import BrandInfo, ModelInfo |
|
12 |
+from mch.models import ActivityInfo, BrandInfo, ModelInfo |
|
12 | 13 |
from utils.algorithm.b64 import b64_decrypt, b64_encrypt |
13 | 14 |
from utils.algorithm.caesar import caesar_decrypt, caesar_encrypt |
14 | 15 |
from utils.algorithm.rsalg import rsa_decrypt, rsa_encrypt |
@@ -108,6 +109,9 @@ def decrypt(request): |
||
108 | 109 |
mdli.decrypt_count += 1 |
109 | 110 |
mdli.save() |
110 | 111 |
|
112 |
+ act = ActivityInfo.objects.filter(status=True).order_by('-pk').first() |
|
113 |
+ has_unexpired_activity = True if act and act.has_unexpired_activity else False |
|
114 |
+ |
|
111 | 115 |
return response(200, data={ |
112 | 116 |
'plaintext': plaintext, |
113 | 117 |
'logo_url': brand.brand_logo_url if brand else '', |
@@ -119,5 +123,6 @@ def decrypt(request): |
||
119 | 123 |
'Model': (model.model_full_name or model.model_name) if model else '', |
120 | 124 |
'DistributorID': distributor_pk, |
121 | 125 |
'SerialNo': sn, |
122 |
- } |
|
126 |
+ }, |
|
127 |
+ 'has_unexpired_activity': has_unexpired_activity, |
|
123 | 128 |
}) |
@@ -12,8 +12,8 @@ from pywe_storage import RedisStorage |
||
12 | 12 |
from TimeConvert import TimeConvert as tc |
13 | 13 |
|
14 | 14 |
from account.models import UserInfo |
15 |
-from mch.models import (AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, LatestAppInfo, |
|
16 |
- LatestAppScreenInfo, ModelInfo, OperatorInfo) |
|
15 |
+from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, |
|
16 |
+ LatestAppInfo, LatestAppScreenInfo, ModelInfo, OperatorInfo) |
|
17 | 17 |
from statistic.models import ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo |
18 | 18 |
from utils.error.errno_utils import (AdministratorStatusCode, OperatorStatusCode, ProductBrandStatusCode, |
19 | 19 |
ProductModelStatusCode, UserStatusCode) |
@@ -274,6 +274,9 @@ def consumer_info_api(request): |
||
274 | 274 |
test_user=False, |
275 | 275 |
).exists() |
276 | 276 |
|
277 |
+ act = ActivityInfo.objects.filter(status=True).order_by('-pk').first() |
|
278 |
+ during_activity = True if act and act.has_unexpired_activity else False |
|
279 |
+ |
|
277 | 280 |
# 记录用户信息提交记录 |
278 | 281 |
log = ConsumeInfoSubmitLogInfo.objects.create( |
279 | 282 |
user_id=user_id, |
@@ -293,6 +296,7 @@ def consumer_info_api(request): |
||
293 | 296 |
serialNo=serialNo, |
294 | 297 |
verifyResult=verifyResult, |
295 | 298 |
dupload=dupload, |
299 |
+ submit_during_activity=during_activity, |
|
296 | 300 |
test_user=user.test_user, |
297 | 301 |
) |
298 | 302 |
|
@@ -8,8 +8,8 @@ from django_admin import AdvancedActionsModelAdmin, AdvancedExportExcelModelAdmi |
||
8 | 8 |
from django_models_ext import ProvinceShortModelMixin |
9 | 9 |
from pysnippets.strsnippets import strip |
10 | 10 |
|
11 |
-from mch.models import (AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, LatestAppInfo, |
|
12 |
- LatestAppScreenInfo, ModelInfo, OperatorInfo, SaleclerkInfo) |
|
11 |
+from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, |
|
12 |
+ LatestAppInfo, LatestAppScreenInfo, ModelInfo, OperatorInfo, SaleclerkInfo) |
|
13 | 13 |
|
14 | 14 |
|
15 | 15 |
class AdministratorInfoAdmin(admin.ModelAdmin): |
@@ -185,6 +185,10 @@ class ConsumeInfoSubmitLogInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin): |
||
185 | 185 |
search_fields = ('user_id', 'phone', 'serialNo') |
186 | 186 |
|
187 | 187 |
|
188 |
+class ActivityInfoAdmin(admin.ModelAdmin): |
|
189 |
+ list_display = ('activity_name', 'start_at', 'end_at', 'status', 'created_at', 'updated_at') |
|
190 |
+ |
|
191 |
+ |
|
188 | 192 |
admin.site.register(AdministratorInfo, AdministratorInfoAdmin) |
189 | 193 |
admin.site.register(OperatorInfo, OperatorInfoAdmin) |
190 | 194 |
admin.site.register(BrandInfo, BrandInfoAdmin) |
@@ -196,3 +200,4 @@ admin.site.register(SaleclerkInfo, SaleclerkInfoAdmin) |
||
196 | 200 |
admin.site.register(LatestAppInfo, LatestAppInfoAdmin) |
197 | 201 |
admin.site.register(LatestAppScreenInfo, LatestAppScreenInfoAdmin) |
198 | 202 |
admin.site.register(ConsumeInfoSubmitLogInfo, ConsumeInfoSubmitLogInfoAdmin) |
203 |
+admin.site.register(ActivityInfo, ActivityInfoAdmin) |
@@ -0,0 +1,36 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+# Generated by Django 1.11.20 on 2019-03-01 06:02 |
|
3 |
+from __future__ import unicode_literals |
|
4 |
+ |
|
5 |
+from django.db import migrations, models |
|
6 |
+ |
|
7 |
+ |
|
8 |
+class Migration(migrations.Migration): |
|
9 |
+ |
|
10 |
+ dependencies = [ |
|
11 |
+ ('mch', '0029_auto_20181117_0052'), |
|
12 |
+ ] |
|
13 |
+ |
|
14 |
+ operations = [ |
|
15 |
+ migrations.CreateModel( |
|
16 |
+ name='ActivityInfo', |
|
17 |
+ fields=[ |
|
18 |
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
|
19 |
+ ('status', models.BooleanField(db_index=True, default=True, help_text='Status', verbose_name='status')), |
|
20 |
+ ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')), |
|
21 |
+ ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')), |
|
22 |
+ ('activity_name', models.CharField(blank=True, help_text='\u6d3b\u52a8\u540d\u79f0', max_length=255, null=True, verbose_name='activity_name')), |
|
23 |
+ ('start_at', models.DateTimeField(help_text='start_at', verbose_name='start_at')), |
|
24 |
+ ('end_at', models.DateTimeField(help_text='end_at', verbose_name='end_at')), |
|
25 |
+ ], |
|
26 |
+ options={ |
|
27 |
+ 'verbose_name': '\u6d3b\u52a8\u4fe1\u606f', |
|
28 |
+ 'verbose_name_plural': '\u6d3b\u52a8\u4fe1\u606f', |
|
29 |
+ }, |
|
30 |
+ ), |
|
31 |
+ migrations.AddField( |
|
32 |
+ model_name='consumeinfosubmitloginfo', |
|
33 |
+ name='submit_during_activity', |
|
34 |
+ field=models.BooleanField(db_index=True, default=False, help_text='\u662f\u5426\u4e3a\u6d3b\u52a8\u671f\u95f4\u4e0a\u4f20', verbose_name='submit_during_activity'), |
|
35 |
+ ), |
|
36 |
+ ] |
@@ -6,6 +6,7 @@ from django.utils.translation import ugettext_lazy as _ |
||
6 | 6 |
from django_models_ext import (BaseModelMixin, ProvinceShortModelMixin, SexModelMixin, upload_file_path, |
7 | 7 |
upload_file_url, upload_path) |
8 | 8 |
from shortuuidfield import ShortUUIDField |
9 |
+from TimeConvert import TimeConvert as tc |
|
9 | 10 |
|
10 | 11 |
|
11 | 12 |
class AdministratorInfo(BaseModelMixin): |
@@ -490,6 +491,8 @@ class ConsumeInfoSubmitLogInfo(BaseModelMixin): |
||
490 | 491 |
|
491 | 492 |
dupload = models.BooleanField(_(u'dupload'), default=False, help_text=_(u'是否为重复提交'), db_index=True) |
492 | 493 |
|
494 |
+ submit_during_activity = models.BooleanField(_(u'submit_during_activity'), default=False, help_text=_(u'是否为活动期间上传'), db_index=True) |
|
495 |
+ |
|
493 | 496 |
test_user = models.BooleanField(_(u'test_user'), default=False, help_text=_(u'是否为测试用户'), db_index=True) |
494 | 497 |
|
495 | 498 |
class Meta: |
@@ -519,4 +522,23 @@ class ConsumeInfoSubmitLogInfo(BaseModelMixin): |
||
519 | 522 |
'model_info': self.model_info, |
520 | 523 |
'serialNo': self.serialNo, |
521 | 524 |
'verifyResult': self.verifyResult, |
525 |
+ 'submit_during_activity': self.submit_during_activity, |
|
522 | 526 |
} |
527 |
+ |
|
528 |
+ |
|
529 |
+class ActivityInfo(BaseModelMixin): |
|
530 |
+ activity_name = models.CharField(_(u'activity_name'), max_length=255, blank=True, null=True, help_text=u'活动名称') |
|
531 |
+ |
|
532 |
+ start_at = models.DateTimeField(_(u'start_at'), help_text=_(u'start_at')) |
|
533 |
+ end_at = models.DateTimeField(_(u'end_at'), help_text=_(u'end_at')) |
|
534 |
+ |
|
535 |
+ class Meta: |
|
536 |
+ verbose_name = _(u'活动信息') |
|
537 |
+ verbose_name_plural = _(u'活动信息') |
|
538 |
+ |
|
539 |
+ def __unicode__(self): |
|
540 |
+ return unicode(self.pk) |
|
541 |
+ |
|
542 |
+ @property |
|
543 |
+ def has_unexpired_activity(self): |
|
544 |
+ return self.start_at <= tc.utc_datetime() < self.end_at |
@@ -9,9 +9,9 @@ isoweek==1.3.3 |
||
9 | 9 |
jsonfield==2.0.2 |
10 | 10 |
mock==2.0.0 |
11 | 11 |
monetary==1.0.2 |
12 |
-pysnippets==1.0.6 |
|
12 |
+pysnippets==1.0.8 |
|
13 | 13 |
qiniu==7.2.2 |
14 |
-requests==2.20.1 |
|
14 |
+requests==2.21.0 |
|
15 | 15 |
rlog==0.3 |
16 | 16 |
rsa==3.4.2 |
17 | 17 |
shortuuid==0.5.0 |
@@ -1,3 +1,3 @@ |
||
1 | 1 |
ipdb==0.11 |
2 |
-ipython==5.6.0 |
|
2 |
+ipython==5.8.0 |
|
3 | 3 |
uwsgi==2.0.17 |
@@ -1,4 +1,4 @@ |
||
1 |
-Django==1.11.16 |
|
1 |
+Django==1.11.20 |
|
2 | 2 |
django-admin==1.3.2 |
3 | 3 |
django-cors-headers==2.4.0 |
4 | 4 |
django-curtail-uuid==1.0.4 |
@@ -6,7 +6,7 @@ django-detect==1.0.8 |
||
6 | 6 |
django-file-md5==1.0.2 |
7 | 7 |
django-file-upload==1.1.0 |
8 | 8 |
django-ip==1.0.2 |
9 |
-django-json-render==1.0.1 |
|
9 |
+django-json-render==1.0.2 |
|
10 | 10 |
django-json-response==1.1.5 |
11 | 11 |
django-logit==1.1.3 |
12 | 12 |
django-mobi==0.1.7 |
@@ -1,3 +1,3 @@ |
||
1 |
-hiredis==0.3.0 |
|
1 |
+hiredis==1.0.0 |
|
2 | 2 |
redis==2.10.6 |
3 |
-redis-extensions==1.2.4 |
|
3 |
+redis-extensions==1.2.5 |